//11009-计科1班-肖健飞
//2．成绩排名次（结构体数组）
//某班期末考试，有最多不超过30人参加考试,按总分成绩由高到低排出成绩的名次。

#include<stdio.h>
#include<math.h>
struct student//定义名称
{
	int score;
	char name[64];//一个汉字占两个字节，外国名字也足够
};
int main()
{
	int i,j,n,k;
	struct student st[30];//定义30个结构体
	int s=0,s6=0,s7=0,s8=0,s9=0;// s为60以下的人数
	/* s6为60-79的人数
	   s7为70-80的人数
	   s8为80-90的人数
	   s9为90-100的人数  */

	void print(int);//声明函数
	do{
		printf("输入需统计人数：");
		scanf("%d",&n);
	}while(n>30);
	k=n;
    for(j=0,i=0;j<k;j++)
	{
		printf("输入名字:");
		scanf("%s",&st[i].name);
		printf("输入成绩:");
		scanf("%d",&st[i].score);
		if(st[i].score<0)    {n++;break;}//若输入的分数小于零，需重新输入
		if(st[i].score<60)   s++;
		if(st[i].score>=60&&st[i].score<70)    s6++;                                      
		if(st[i].score>=70&&st[i].score<80)    s7++;
		if(st[i].score>=80&&st[i].score<90)    s8++;
		if(st[i].score>=90&&st[i].score<=100)  s9++;//将分数分段
		i++;
	}
	printf("*********************************************************\n");
	printf("不及格人数:%d\n",s);
	printf("不及格名单:\n");

	for(i=0;i<k;i++)
	{
	if(st[i].score<60)printf("%s\n",st[i].name);//输出不及格的名单
	}

	printf("分数段   学生人数   图形\n");
	printf("<60      %d\(%.2lf\%%\)  ",s,(s*1.0)/(k*1.0)*100);	
	print(s);//

	printf("60-69    %d\(%.2lf\%%\)  ",s6,(s6*1.0)/(k*1.0)*100);
	print(s6);

	printf("70-79    %d\(%.2lf\%%\)  ",s7,(s7*1.0)/(k*1.0)*100);	
	print(s7);

	printf("80-89    %d\(%.2lf\%%\)  ",s8,(s9*1.0)/(k*1.0)*100);	
	print(s8);

	printf("90-100   %d\(%.2lf\%%\)  ",s9,(s9*1.0)/(k*1.0)*100);	
	print(s9);
}

void print(int k)//显示直方图
{
	while(k--)
		printf("*");//用*的个数来表示人的个数
	printf("\n");
}